﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 25/04/2014
 * Time: 03:27 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections.Generic;
using System.Data;

namespace Gestión_UTN.blimpl
{
    /// <summary>
    /// Description of inscripcionMateriablimpl.
    /// </summary>
    public class inscripcionMateriablimpl : bl.inscripcionMateriabl
    {
        private static da.inscripcionMateriada createInsMateria = factories.dafactory.createInsMateria();
        private static bl.alumnobl createAlumno = factories.blfactory.createAlumno();
        private static bl.materiabl createMateria = factories.blfactory.createMateria();

        public inscripcionMateriablimpl()
        {
        }

        public bool SaveInscripcionMateria(Gestión_UTN.bo.InscripcionMateriabo inm)
        {
            bool ingresada = false;

            try
            {
                ingresada = (null != inm)
                    ? createInsMateria.SaveInscripcionMateria(inm.Fecha,
                                                              inm.Alumno.Dni,
                                                              inm.Materia.Id)
                    : false;

            }
            catch (exceptions.daexception ex)
            {
                ingresada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                ingresada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return ingresada;
        }

        public bool DeleteInscripcionMateria(DateTime fecha, int alu_dni, int mat_id)
        {
            bool eliminada = false;

            try
            {
                eliminada = (null != fecha && 0 != alu_dni && 0 != mat_id)
                    ? createInsMateria.DeleteInscripcionMateria(fecha, alu_dni, mat_id)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                eliminada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                eliminada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return eliminada;
        }

        public bool ModifyInscripcionMateria(DateTime fecha_anterior, int alu_dni_anterior, int mat_id_anterior, Gestión_UTN.bo.InscripcionMateriabo inm)
        {
            bool modificada = false;

            try
            {
                modificada = (null != fecha_anterior && 0 != alu_dni_anterior && 0 != mat_id_anterior && null != inm)
                    ? createInsMateria.ModifyInscripcionMateria(fecha_anterior, alu_dni_anterior, mat_id_anterior,
                                                                inm.Fecha, inm.Alumno.Dni, inm.Materia.Id)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                modificada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                modificada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return modificada;
        }

        public System.Data.DataTable FindAllInscripcionesMaterias()
        {
            DataTable tablaInscripciones = null;

            try
            {
                tablaInscripciones = createInsMateria.FindAllInscripcionesMaterias();
            }
            catch (exceptions.daexception ex)
            {
                tablaInscripciones = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                tablaInscripciones = null;
                throw new exceptions.blexception(ex.Message);
            }

            return tablaInscripciones;
        }

        public System.Collections.Generic.List<Gestión_UTN.bo.InscripcionMateriabo> FindInscripcionMateriaByDNI(int alu_dni)
        {
            List<bo.InscripcionMateriabo> inscripciones = null;

            try
            {
                List<Entities.InscripcionMateria> inscs = (0 != alu_dni)
                    ? createInsMateria.FindInscripcionMateriaByDNI(alu_dni)
                    : null;

                if (null != inscs)
                {
                    inscripciones = new List<Gestión_UTN.bo.InscripcionMateriabo>();

                    foreach (var i in inscs)
                    {
                        bo.Alumnobo alu = createAlumno.FindAlumnoByDNI(i.Alu_dni);

                        bo.Materiabo mat = createMateria.FindMateriaByMatId(i.Mat_id);

                        bo.InscripcionMateriabo inm = new bo.InscripcionMateriabo(i.Id, i.Fecha, alu, mat);

                        inscripciones.Add(inm);

                        inm = null;

                        alu = null;

                        mat = null;
                    }
                }
            }
            catch (exceptions.daexception ex)
            {
                inscripciones = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                inscripciones = null;
                throw new exceptions.blexception(ex.Message);
            }

            return inscripciones;
        }

        public System.Collections.Generic.List<Gestión_UTN.bo.InscripcionMateriabo> FindInscripcionMateriaByMateria(int mat_id)
        {
            List<bo.InscripcionMateriabo> inscripciones = null;

            try
            {
                List<Entities.InscripcionMateria> inscs = (0 != mat_id)
                    ? createInsMateria.FindInscripcionMateriaByMateria(mat_id)
                    : null;

                if (null != inscs)
                {
                    inscripciones = new List<Gestión_UTN.bo.InscripcionMateriabo>();

                    foreach (var i in inscs)
                    {
                        bo.Alumnobo alu = createAlumno.FindAlumnoByDNI(i.Alu_dni);

                        bo.Materiabo mat = createMateria.FindMateriaByMatId(i.Mat_id);

                        bo.InscripcionMateriabo inm = new bo.InscripcionMateriabo(i.Id, i.Fecha, alu, mat);

                        inscripciones.Add(inm);

                        inm = null;

                        alu = null;

                        mat = null;
                    }
                }
            }
            catch (exceptions.daexception ex)
            {
                inscripciones = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                inscripciones = null;
                throw new exceptions.blexception(ex.Message);
            }

            return inscripciones;
        }

        public System.Collections.Generic.List<Gestión_UTN.bo.InscripcionMateriabo> FindInscripcionMateriaByFecha(DateTime fecha)
        {
            List<bo.InscripcionMateriabo> inscripciones = null;

            try
            {
                List<Entities.InscripcionMateria> inscs = (null != fecha)
                    ? createInsMateria.FindInscripcionMateriaByFecha(fecha)
                    : null;

                if (null != inscs)
                {
                    inscripciones = new List<Gestión_UTN.bo.InscripcionMateriabo>();

                    foreach (var i in inscs)
                    {
                        bo.Alumnobo alu = createAlumno.FindAlumnoByDNI(i.Alu_dni);

                        bo.Materiabo mat = createMateria.FindMateriaByMatId(i.Mat_id);

                        bo.InscripcionMateriabo inm = new bo.InscripcionMateriabo(i.Id, i.Fecha, alu, mat);

                        inscripciones.Add(inm);

                        inm = null;

                        alu = null;

                        mat = null;
                    }
                }
            }
            catch (exceptions.daexception ex)
            {
                inscripciones = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                inscripciones = null;
                throw new exceptions.blexception(ex.Message);
            }

            return inscripciones;
        }
    }
}
